Software tools are used to monitor and analyse the execution of computer applications on a computer system. The form of monitoring may vary from logging occasional messages to logging every step of an computer program for evaluation. This can be very processor intensive for the processor on which the software tool is running. It is also necessary to trace the logging messages to the components of the system being monitored in order to obtain a complete picture of the performance of the system.
It is particularly beneficial, to log messages and trace the messages to components in real time as the system is running in order to take necessary action immediately to address any issues demonstrated by the logging. Run time logging and tracing requires even more processor performance.
A Java logging application programming interface (API) (Java is a trade mark of Sun Corporation) is provided in the Java platform to facilitate software servicing and maintenance at customer sites.
The Java logging API enables a Java program application, servlet, applet, EJB (Enterprise Java Bean), etc to produce messages which are collected as log reports. The log reports can be used for analysis by, for example, end users, system administrators, field service engineers, and software development teams. The log reports capture information such as security failures, configuration errors, performance bottlenecks, and/or bugs in the application or platform. This is a very user friendly and flexible logging API.
Java Specification Request JSR-47 is a logging API specification provided in the Java package java.util.logging in Java virtual machine (JVM) versions 1.4 onwards. The package java.util.logging has various interfaces and classes of objects including a logger class of objects.
Software components in a system which is being logged send messages to logger objects in the logging API. The logger objects are virtual components that represent the software components in the applications being logged. The messages are either accepted or discarded by the logger object depending on the priority level of the log message. Logger objects are organised in a hierarchical namespace and child logger objects may inherit logging properties from their parents in the namespace. The hierarchical namespace is managed by a log manager.
The Java logging API is easy to interface with other applications such as control consoles and can allow the modification of filtering levels for any part of any branch of its hierarchical structure. However, it is too slow and impractical to trace logging messages through a system in real time.
The Java logging API uses an object-oriented method of controlling objects. A component being traced in a computer system has a record logged and pushed up the hierarchical tree to the root node of the tree which outputs the log record. This form of logging is very effective when logging occasional messages. However, when tracing a large number of log records, the system is very slow as it must check at each node in a branch of the tree hierarchical structure.
The hierarchical system used by the Java logging API has the disadvantage that it is very slow and highly impractical to trace data through it in a real time system. The central processing hit would be intolerably high. The reasons for this include the following:                It is string based, and string manipulations are slow in Java;        The trace calls are passed through the hierarchy of logical components to the root node, every time checking to see if it passed the check for that node; and        The hierarchy is maintained in namespace which itself is slow to use, and slow to find the next node.        
It is an aim of the present invention to provide a tracing system and method that implements a hierarchical trace system interface whilst allowing a flat system to handle the tracing.
Enabling a flat, non-hierarchical system to handle the tracing provides the speed essential for a real time tracing system. However, a known hierarchical trace system interface, for example JSR-47, provides a lot of flexibility and user friendliness.